/*
 	Tool for Path Finding Algorithm Testing (ToPFAT) 
 	
    Copyright (C) 2009, Teemu Turunen and Arttu Viljakainen 
    Published under GNU General Public License V3 
    (see http://www.gnu.org/licenses/licenses.html)
    
    This file is part of Tool for Path Finding Algorithm Testing.

    Tool for Path Finding Algorithm Testing is free software: you can 
    redistribute it and/or modify it under the terms of the GNU General 
    Public License as published by the Free Software Foundation, 
    either version 3 of the License, or (at your option) any later version.

    Tool for Path Finding Algorithm Testing is distributed in the hope that it
    will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General 
    Public License for more details.

    You should have received a copy of the GNU General Public License
    along with Tool for Path Finding Algorithm Testing. If not, see         <http://www.gnu.org/licenses/>.
 */

package pathfinding.gui.listeners;

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;

import pathfinding.SettingsObject;
import pathfinding.gui.MapCell;

/**
 * MouseListener and MouseMotionListener class for user mouse input
 * (for MapCell mouse over effects and setting MapCells according to settings).
 * 
 * @author arttu viljakainen
 * @author teturun
 */
public class MouseInput implements MouseListener, MouseMotionListener {
	private static MouseInput SINGLETON;
	
	private boolean isPressed;
	
	public static MouseInput getInstance() {
		if(SINGLETON == null)
			SINGLETON = new MouseInput();
		return SINGLETON;
	}
	
	private MouseInput() {
		this.isPressed = false;
	}
	
	@Override
	public void mouseClicked(MouseEvent e) {
		// method left intentionally unimplemented
	}

	@Override
	public void mouseEntered(MouseEvent e) {
		
		if (e.getSource() instanceof MapCell) {
			MapCell source = (MapCell) e.getSource();
			source.setBackground(source.mouseOverBgColor);
		}
		if (this.isPressed) {
			MapCell source = (MapCell) e.getSource();
			SettingsObject.getInstance().doSettings(source);
		}
	}

	@Override
	public void mouseExited(MouseEvent e) {
		
		if (e.getSource() instanceof MapCell) {
			MapCell source = (MapCell) e.getSource();
			source.setBackground(source.colorWhenNotMouseOver);
		}
		
	}

	@Override
	public void mousePressed(MouseEvent e) {
		if (e.getSource() instanceof MapCell) {
			MapCell source = (MapCell) e.getSource();
			SettingsObject.getInstance().doSettings(source);
		}
	}

	@Override
	public void mouseReleased(MouseEvent e) {
		this.isPressed = false;
	}

	@Override
	public void mouseDragged(MouseEvent e) {
		this.isPressed = true;
	}

	@Override
	public void mouseMoved(MouseEvent e) {
		// TODO Auto-generated method stub
	}	
	
}